﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace LWH.XmlHandler
{
    /// <summary>
    /// 可能包含一个或多个子节点的节点，如果自身解析成功，则开始历遍节点列表
    /// 整个架构为：定义父节点P1下，可能存在的子节点类型为C1,C2,C3
    /// 父节点存在->将父节点放入Context并开始调用C1的handleXml，让C1判断自身
    /// 是否存在于父节点中，如果存在则调用C1的DidGetElement，然后C2、C3重复
    /// 此步骤。
    /// 
    /// 这个框架只是用于解析XML的数据流程，解析出的数据如果需要保存，需要对
    /// 每个节点定义个类，定义变量储存数据。
    /// 这时需要根据实际需求决定，是定义简单结构储存数据，或是继承ElementHandler
    /// 将数据定义储存在其中，亦或完全抛弃此框架。
    /// </summary>
    class PackageElementHandler :AbstractElementHandler
    {
        /// <summary>
        /// 所有可能出现在此节点的直接子节点的节点列表
        /// </summary>
        List<AbstractElementHandler> mElementHandlerList = new List<AbstractElementHandler>();

        public PackageElementHandler(string elementName):base(elementName)
        {
        }


        protected override void DidGetElement(Dictionary<string, object> context, XmlNode currentElement)
        {

            context["ParentElement"]=currentElement;

            foreach(var elementHandler in mElementHandlerList)
            {
                elementHandler.handleXml(context);
            }
        }

        public void addExpression(AbstractElementHandler abstractElementHandler)
        {
            mElementHandlerList.Add(abstractElementHandler);
        }

        public void removeExpression(AbstractElementHandler abstractElementHandler)
        {
            mElementHandlerList.Remove(abstractElementHandler);
        }

    }
}
